import { postWithQueryParams } from "@/api/request";

/**
 * 登录控制器 / 登录控制器忘记密码
 * @param {object} params
 * @param {object} data
 * @param {string} params.confirmPassword confirmPassword
 * @param {string} params.mobile mobile
 * @param {string} params.newPassword newPassword
 * @param {string} params.verifyCode verifyCode
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<User页面展示实体>}
 * @author 安奇
 */
export function systemLoginForgetPassword(params, data, config) {
  return postWithQueryParams("/system/login/forgetPassword", params, data, config);
}

/**
 * 登录控制器 / 登录控制器获取三方系统accessToken
 * @param {object} params
 * @param {object} data
 * @param {string} params.code code
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<通过access_token获取用户信息返回参数>}
 * @author 肖玮
 */
export function systemLoginGetAccessToken(params, data, config) {
  return postWithQueryParams("/system/login/getAccessToken", params, data, config);
}

/**
 * 登录控制器 / 登录控制器登录检验短信验证
 * @param {object} params
 * @param {object} data
 * @param {string} params.mobile mobile
 * @param {string} params.verifyCode verifyCode
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<string>}
 * @author 安奇
 */
export function systemLoginLoginCheckVerifyCode(params, data, config) {
  return postWithQueryParams("/system/login/login/checkVerifyCode", params, data, config);
}

/**
 * 登录控制器 / 登录控制器注册检验短信验证
 * @param {object} params
 * @param {object} data
 * @param {string} params.mobile mobile
 * @param {string} params.verifyCode verifyCode
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<string>}
 * @author 李居帅
 */
export function systemLoginRegisterCheckVerifyCode(params, data, config) {
  return postWithQueryParams("/system/login/register/checkVerifyCode", params, data, config);
}

/**
 * 登录控制器 / 登录控制器发送短信验证
 * @param {object} params
 * @param {object} data
 * @param {string} params.code code
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<string>}
 * @author 李居帅
 */
export function systemLoginSendSms(params, data, config) {
  return postWithQueryParams("/system/login/sendSms", params, data, config);
}

/**
 * 登录控制器 / 登录控制器短信验证码登录
 * @param {object} params
 * @param {object} data
 * @param {string} params.mobile mobile
 * @param {string} params.verifyCode verifyCode
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<string>}
 * @author 方昊
 */
export function systemLoginSms2(params, data, config) {
  return postWithQueryParams("/system/login/sms2", params, data, config);
}

/**
 * @typedef {object} 通过access_token获取用户信息返回参数 通过access_token获取用户信息返回参数
 * @property {string} accessToken 访问token值
 * @property {number} expiresIn 访问token剩余过期秒数
 * @property {string} refreshToken 刷新token值（可在访问token过期后用此token刷新）
 * @description 通过access_token获取用户信息返回参数
 */

/**
 * @typedef {object} User页面展示实体 页面展示实体
 * @property {string} address 通讯地址
 * @property {string} birthday 生日
 * @property {string} cardNum 证件号码
 * @property {string} cardType 证件类型 可选值: ID_CARD, PASS_PORT
 * @property {string} createUser 创建用户
 * @property {string} created 创建时间
 * @property {boolean} delFlag 删除标识(false:否, true:是)
 * @property {string} departId 部门ID
 * @property {string} duties 职务
 * @property {string} email 信箱
 * @property {number} enabled 启用状态（1已启用，0已禁用）
 * @property {string} gender 性别
 * @property {string} id 用户ID
 * @property {boolean} is_internal 0非内置用户；1内置用户
 * @property {string} jobNumber 工号
 * @property {string} landlineNumber 座机号码
 * @property {string} lastLoginTime 最后一次登录时间
 * @property {string} lastPasswordUpdateTime 最后一次密码修改时间
 * @property {string} notes 备注
 * @property {string} parentTenantId 所属父租户ID
 * @property {boolean} passwordExpired 密码是否过期（1已过期，0未过期）
 * @property {string} pic 照片
 * @property {string} realName 用户姓名
 * @property {string} telephone 手机号
 * @property {string} tenantId 所属租户ID
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @property {string} userType 用户类型(tenant、system)
 * @property {string} username 用户账号
 * @description 页面展示实体
 */
